home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / reuse.lha / reuse / src / Lists.mi < prev    next >
Text File  |  1992-08-18  |  2KB  |  101 lines

  1. (* $Id: Lists.mi,v 1.2 1991/11/21 14:33:17 grosch rel $ *)
  2.  
  3. (* $Log: Lists.mi,v $
  4.  * Revision 1.2  1991/11/21  14:33:17  grosch
  5.  * new version of RCS on SPARC
  6.  *
  7.  * Revision 1.1  88/10/20  17:20:44  grosch
  8.  * fixed bug: initialization in Length added
  9.  * 
  10.  * Revision 1.0  88/10/04  11:47:05  grosch
  11.  * Initial revision
  12.  * 
  13.  *)
  14.  
  15. (* Ich, Doktor Josef Grosch, Informatiker, Sept. 1987 *)
  16.  
  17. IMPLEMENTATION MODULE Lists;
  18.  
  19. FROM SYSTEM    IMPORT ADDRESS, TSIZE;
  20. FROM Memory    IMPORT Alloc;
  21. FROM IO        IMPORT tFile;
  22.  
  23. PROCEDURE MakeList    (VAR List: tList);
  24.    BEGIN
  25.       List.FirstElmt    := NIL;
  26.       List.LastElmt    := NIL;
  27.    END MakeList;
  28.  
  29. PROCEDURE Insert    (VAR List: tList; Elmt: tElmt);
  30.    VAR ActElmt    : tListElmtPtr;
  31.    BEGIN
  32.       ActElmt := Alloc (TSIZE (tListElmt));
  33.       ActElmt^.Succ := NIL;
  34.       ActElmt^.Elmt := Elmt;
  35.       IF List.FirstElmt = NIL THEN
  36.      List.LastElmt := ActElmt;
  37.       ELSE
  38.      ActElmt^.Succ := List.FirstElmt;
  39.       END;
  40.       List.FirstElmt := ActElmt;
  41.    END Insert;
  42.  
  43. PROCEDURE Append    (VAR List: tList; Elmt: tElmt);
  44.    VAR ActElmt    : tListElmtPtr;
  45.    BEGIN
  46.       ActElmt := Alloc (TSIZE (tListElmt));
  47.       ActElmt^.Succ := NIL;
  48.       ActElmt^.Elmt := Elmt;
  49.       IF List.FirstElmt = NIL THEN
  50.          List.FirstElmt    := ActElmt;
  51.       ELSE
  52.      List.LastElmt^.Succ := ActElmt;
  53.       END;
  54.       List.LastElmt := ActElmt;
  55.    END Append;
  56.  
  57. PROCEDURE Head        (    List: tList): tElmt;
  58.    BEGIN
  59.       RETURN List.FirstElmt^.Elmt;
  60.    END Head;
  61.  
  62. PROCEDURE Tail        (VAR List: tList);
  63.    BEGIN
  64.       List.FirstElmt := List.FirstElmt^.Succ;
  65.    END Tail;
  66.  
  67. PROCEDURE Last        (    List: tList): tElmt;
  68.    BEGIN
  69.       RETURN List.LastElmt^.Elmt;
  70.    END Last;
  71.  
  72. PROCEDURE Front        (VAR List: tList);
  73.    BEGIN
  74.    END Front;
  75.  
  76. PROCEDURE IsEmpty    (    List: tList): BOOLEAN;
  77.    BEGIN
  78.       RETURN List.FirstElmt = NIL;
  79.    END IsEmpty;
  80.  
  81. PROCEDURE Length    (    List: tList): CARDINAL;
  82.    VAR n    : CARDINAL;
  83.    BEGIN
  84.       n := 0;
  85.       WHILE List.FirstElmt # NIL DO
  86.      INC (n);
  87.      List.FirstElmt := List.FirstElmt^.Succ;
  88.       END;
  89.       RETURN n;
  90.    END Length;
  91.  
  92. PROCEDURE WriteList    (f: tFile; List: tList; Proc: tProcOfFileAddress);
  93.    BEGIN
  94.       WHILE NOT IsEmpty (List) DO
  95.      Proc (f, Head (List));
  96.      Tail (List);
  97.       END;
  98.    END WriteList;
  99.  
  100. END Lists.
  101.